package dm

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/http/httputil"

	// http性能分析 _ 虽然没有用到但是需要里面的帮助提示 不加_ 会提示没用到 用了后浏览器可以用里面的一些功能虽然代码没用
	_ "net/http/pprof" // 命令行用到 点进去 pprof.go // Or to look at a 30-second CPU profile:
	//
	//	go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 好了打 web 生成svg 分析就得了
)

func HttpServer() {
	//注测服务
	http.HandleFunc("/list", func(writer http.ResponseWriter, request *http.Request) {
		fmt.Fprint(writer, "admin")
	})

	// 开启监控 注意别漏了端口
	http.ListenAndServe("0.0.0.0:3323", nil)
}

func HttpClient() {
	res, _ := http.Get("http://qd.cityhouse.cn/")

	rs, e := ioutil.ReadAll(res.Body)

	by, _ := httputil.DumpResponse(res, true)

	fmt.Println("==>>", string(rs), e, "===>>>", string(by))

	defer res.Body.Close()
}

func CRD(req *http.Request, via []*http.Request) error {
	// via 所有需要重定向的内容 如果有错误终止重定向，返回nil继续重定向 所有重定向内容路径放在via里面 目标放在req里面 err 返回nil让它重定向 返回错误终止重定向
	fmt.Println(req.URL, via)
	return nil // 让他重定向
}

func HttpClientHd() {
	// 创建一个请求头
	req, e := http.NewRequest(http.MethodGet, "http://imooc.com/", nil)
	if e != nil {
		panic(e)
	}

	// 设置header Add 添加一条
	req.Header.Add("user-agent", "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36")

	// 执行请求
	res, error := http.DefaultClient.Do(req)

	// 自定义client不用默认的http.DefaultClient
	//http.Client{} 介绍
	/**
	Transport RoundTripper 设置代理服务器
	CheckRedirect func xxxx 如果访问的地址里面有重定向会从这个函数过。
	Jar CookieJar 设置cookie做爬虫有用模拟已经登录了
	time 超时时间
	*/
	// 怎么使用？
	clt := http.Client{
		CheckRedirect: CRD,
	}
	s, _ := clt.Do(req)
	res = s

	if error != nil {
		panic(error)
	}
	d, es := httputil.DumpResponse(res, true)
	if es != nil {
		panic(es)
	}
	fmt.Printf("%s", d)
}

// http 服务器性能分析
/**
import _ "net/http/pprof"
访问
/debug/pprof
使用 go tool pprof 性能分析
命令行工具
*/
func HttpPprof() {
	http.HandleFunc("/list", func(writer http.ResponseWriter, request *http.Request) {
		fmt.Fprint(writer, "admin")
	})
	http.ListenAndServe("0.0.0.0:1234", nil)
}

func BasicK() {
	// HttpServer()
	// HttpClient()
	//HttpClientHd()
	HttpPprof()
}
